#pragma once
#include "scenenode.h"
#include "mesh.h"

/**
 * Klasa wezla sceny zawierajacego siatke.
 *
 * @author Krzysztof Klein
 * @version 0.1
 */
class MeshSceneNode : public SceneNode
{

	/**
	 * Siatka
	 */
	Mesh* mesh;

public:

	/**
	 * Konstruktor domyslny
	 */
	MeshSceneNode(SceneNode* parentNode, std::string &name = std::string("unnamedMesh"))
		: SceneNode(parentNode, name), mesh(NULL) { }

	/**
	 * Destruktor
	 */
	virtual ~MeshSceneNode()
	{
		if(mesh)
			mesh->release();
	}


	/**
	 * Renderuje wezel sceny
	 */
	virtual void draw();

	/**
	 * Odswierza macierz bezwzglednej transformacji
	 */
	virtual void refreshAbsoluteTransformation(bool recursive = false);

	/**
	 * Siatka
	 */
	Mesh* getMesh() const { return mesh; }
	void setMesh(Mesh* m);


	/**
	 * Laduje wezel sceny i jego podwezly z danych pliku X.
	 */
	virtual bool loadFromXof(LPD3DXFILEDATA xofFileData);

	/**
	 * Sprawdza kolizje
	 */
	virtual void checkCollision(const BoundingBox &playerBox,
		float playerRadius, Physics::CollisionPacket &col) const;

};
